; Shining Force (J).bin
;
; Script = $131AAA-13F2C8 = $d81f (~54.0 KB compressed / ~94.7 KB decompressed raw)


; Save registers d0-d7,a0-a6

00:2354  48 E7  MOVEM.L {d0-a7}[ff fe],-(A7)     A0=00FF5000 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFFB6 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnzvc

; Grab string offset

00:2358  61 00  BSR     #$0082 [00:23DC]         A0=00FF5000 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF7A D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnzvc

; Check string length (1 = NULL, avoid)

00:235C  0C 39  CMPI.B  #$01,($00FFF805)         A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF7A D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc
00:2364  67 00  BEQ     #$015E [00:24C4]         A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF7A D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc

; Launch decoder

00:2368  4E B9  JSR     ($00130004)              A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF7A D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc

; ___________________________________________________________

; Load string pointer

00:23DC  61 48  BSR     #$48 [00:2426]           A0=00FF5000 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnzvc

; Initialise

00:23DE  61 22  BSR     #$22 [00:2402]           A0=00131F85 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
00:23E0  4E 75  RTS                              A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc

; ____________________________________________________________

; Save d0

00:2426  48 A7  MOVEM.W {d0-a7}[80 00],-(A7)     A0=00FF5000 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnzvc

; Load bank #

00:242A  EC 48  LSR.W   #6,D0                    A0=00FF5000 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF70 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnzvc
00:242C  02 00  ANDI.B  #$FC,D0                  A0=00FF5000 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF70 D0=00000001 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnzvc

; Load script bank pointer
;
; Table @ $13f308-13f32b (4-byte pointers, 8 text banks)

00:2430  20 79  MOVE.l  ($00130000),A0           A0=00FF5000 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF70 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnZvc
00:2436  20 70  MOVE.l  $00(A0,D0),A0            A0=0013F308 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF70 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnZvc

; Restore d0

00:243A  4C 9F  MOVEM.W (A7)+,{a7-d0}[00 01]     A0=00131AAA A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF70 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnZvc

; Check if string skipping is needed

00:243E  4A 00  TST.B   D0                       A0=00131AAA A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnZvc
00:2440  67 0A  BEQ     #$0A [00:244C]           A0=00131AAA A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnzvc

; Skip compressed string (already includes length byte)

00:2442  7E 00  MOVEQ   #$00,D7                  A0=00131AAA A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000800 xnzvc
00:2444  1E 10  MOVE.b  (A0),D7                  A0=00131AAA A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000000 xnZvc
00:2446  D1 C7  ADDA.L  D7,A0                    A0=00131AAA A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000011 xnzvc
00:2448  53 00  SUBQ.B  #1,D0                    A0=00131ABB A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000052 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000011 xnzvc
00:244A  60 F2  BRA     #$F2 [00:243E]           A0=00131ABB A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000051 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000011 xnzvc
00:244C  4E 75  RTS                              A0=00131F85 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc

; ____________________________________________________________

00:2402  42 B9  CLR.L   ($00FFF904)              A0=00131F85 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
00:2408  42 39  CLR.B   ($00FFF806)              A0=00131F85 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
00:240E  42 79  CLR.W   ($00FFF842)              A0=00131F85 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc

; Make note of length

00:2414  13 D8  MOVE.b  (A0)+,($00FFF805)        A0=00131F85 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
00:241A  23 FC  MOVE.l  #$00FFF844,($00FFF90C)   A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc
00:2424  4E 75  RTS                              A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc

; ____________________________________________________________

; Init decoder by clearing barrels and setting initial Huffman tree to EOS

13:0004  4E FA  JMP     $1A1C(PC)                A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc

13:1A22  13 FC  MOVE.b  #$C0,($00FFF809)         A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc
13:1A2A  42 79  CLR.W   ($00FFF8DC)              A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xNzvc
13:1A30  42 79  CLR.W   ($00FFF8DA)              A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
13:1A36  4E 75  RTS                              A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc

; ____________________________________________________________

; Save initial string pointer and process string

00:236E  23 C8  MOVE.l  A0,($00FFF908)           A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF7A D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
00:2374  61 6C  BSR     #$6C [00:23E2]           A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF7A D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc

...

00:24CE  46 40  NOT.W   D0                       A0=00131C84 A1=000027AC A2=00FF120A A3=00FF100E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000FFFC D1=00002376 D2=00000010 D3=0000FFFF D4=FFFF0000 D5=0000FFFF D6=FFFFFFFF D7=0000000E xNzvc
00:24D0  E5 48  LSL.W   #2,D0                    A0=00131C84 A1=000027AC A2=00FF120A A3=00FF100E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000003 D1=00002376 D2=00000010 D3=0000FFFF D4=FFFF0000 D5=0000FFFF D6=FFFFFFFF D7=0000000E xnzvc
00:24D2  4E FB  JMP     $0C(PC,D0)               A0=00131C84 A1=000027AC A2=00FF120A A3=00FF100E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000000C D1=00002376 D2=00000010 D3=0000FFFF D4=FFFF0000 D5=0000FFFF D6=FFFFFFFF D7=0000000E xnzvc

; ____________________________________________________________

; Load next script byte

00:23E2  61 00  BSR     #$006A [00:244E]         A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc

00:23E6  0C 40  CMPI.W  #$FFEA,D0                A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 Xnzvc
00:23EA  67 14  BEQ     #$14 [00:2400]           A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 XnzvC

00:23EC  48 E7  MOVEM.L {d0-a7}[80 00],-(A7)     A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 XnzvC
00:23F0  61 00  BSR     #$0368 [00:275A]         A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 XnzvC

00:275A  0C 39  CMPI.B  #$02,($00FFF802)         A0=00131C84 A1=000027AC A2=00FF120A A3=00FF100E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF6E D0=0000FFFC D1=00000020 D2=00000010 D3=0000FFFF D4=FFFF0000 D5=0000FFFF D6=FFFFFFFF D7=0000000E xnzvc
00:2762  66 00  BNE     #$FFFFFDEA [00:254E]     A0=00131C84 A1=000027AC A2=00FF120A A3=00FF100E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF6E D0=0000FFFC D1=00000020 D2=00000010 D3=0000FFFF D4=FFFF0000 D5=0000FFFF D6=FFFFFFFF D7=0000000E xnZvc
00:2766  4E 75  RTS                              A0=00131C84 A1=000027AC A2=00FF120A A3=00FF100E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF6E D0=0000FFFC D1=00000020 D2=00000010 D3=0000FFFF D4=FFFF0000 D5=0000FFFF D6=FFFFFFFF D7=0000000E xnZvc

; ____________________________________________________________

; Check decoder flag

00:244E  4A B9  TST.L   ($00FFF904)              A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnzvc
00:2454  66 00  BNE     #$0046 [00:249C]         A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc

; Grab decoded byte

00:2458  20 79  MOVE.l  ($00FFF908),A0           A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
00:245E  4E B9  JSR     ($00130008)              A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
00:2464  23 C8  MOVE.l  A0,($00FFF908)           A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 Xnzvc

; <end>

00:246A  0C 00  CMPI.B  #$C0,D0                  A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 Xnzvc
00:246E  67 1C  BEQ     #$1C [00:248C]           A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 XnzvC

; Regular tile

00:2470  65 14  BCS     #$14 [00:2486]           A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 XnzvC

; Move to scripting range

00:2472  04 00  SUBI.B  #$C1,D0                  A0=00131F9D A1=0000DE20 A2=00FF3800 A3=FFFFF836 A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000FFCF D1=00000025 D2=00000002 D3=00000180 D4=FFFF000C D5=0000FF00 D6=FFFF0001 D7=0000FFFF Xnzvc
00:2476  02 40  ANDI.W  #$00FF,D0                A0=00131F9D A1=0000DE20 A2=00FF3800 A3=FFFFF836 A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000FF0E D1=00000025 D2=00000002 D3=00000180 D4=FFFF000C D5=0000FF00 D6=FFFF0001 D7=0000FFFF xnzvc

; Prepare to use a vector table

00:247A  D0 40  ADD.W   D0,D0                    A0=00131F9D A1=0000DE20 A2=00FF3800 A3=FFFFF836 A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000000E D1=00000025 D2=00000002 D3=00000180 D4=FFFF000C D5=0000FF00 D6=FFFF0001 D7=0000FFFF xnzvc
00:247C  43 FA  LEA     $032E(PC),A1             A0=00131F9D A1=0000DE20 A2=00FF3800 A3=FFFFF836 A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000001C D1=00000025 D2=00000002 D3=00000180 D4=FFFF000C D5=0000FF00 D6=FFFF0001 D7=0000FFFF xnzvc
00:2480  30 31  MOVE.w  $00(A1,D0),D0            A0=00131F9D A1=000027AC A2=00FF3800 A3=FFFFF836 A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000001C D1=00000025 D2=00000002 D3=00000180 D4=FFFF000C D5=0000FF00 D6=FFFF0001 D7=0000FFFF xnzvc
00:2484  4E 75  RTS                              A0=00131F9D A1=000027AC A2=00FF3800 A3=FFFFF836 A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF76 D0=0000FFF7 D1=00000025 D2=00000002 D3=00000180 D4=FFFF000C D5=0000FF00 D6=FFFF0001 D7=0000FFFF xNzvc

; $C0 = <end>
; $C1 = <dictionary>
; $C2 = <line>
; $C3 = ---------------
; $C4 = <delay 02>
; $C5 = <number>
; $C6 = <name>
; $C7 = ---------------
; $C8 = <party leader>
; $CA = <item>
; $CB = <spell>
; $CC = ---------------
; $CD = <wait more>
; $CF = <delay 01>
; $D0 = <wait>
; $D1 = <delay 03>
; $D2 = <class>
; $D3 = <color **>

; Normal tile

00:2486  02 40  ANDI.W  #$00FF,D0                A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 XnzvC
00:248A  4E 75  RTS                              A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF72 D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 Xnzvc

; _____________________________________________________________

13:0008  4E FA  JMP     $1A2E(PC)                A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF6E D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc

; 10 18  MOVE.b  (A0)+,D0
; 4e 75  rts
;
; A0=00131C83

; Semi-adaptive Huffman decoder

; Note: Huffman trees are stored in Polish notation structure (0 = non-leaf, 1 = leaf)
;       The symbols of the leaf nodes are stored in reverse order preceding the tree.

; Decoder:       $131a38-131aa9
; Huffman table: $13000c-1301b3 ($d4 trees)
; Huffman trees: $1301b4-131a6c

; Save registers used (d1-d7, a1-a3)

13:1A38  48 E7  MOVEM.L {d0-a7}[7f 70],-(A7)     A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF6E D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc

; D6 = Huffman length (script)
; D7 = Huffman barrel (script)

13:1A3C  47 F9  LEA     ($00FFF8DC),A3           A0=00131F86 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
13:1A42  3C 13  MOVE.w  (A3),D6                  A0=00131F86 A1=00004000 A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 xnZvc
13:1A44  3E 2B  MOVE.w  $FFFE(A3),D7             A0=00131F86 A1=00004000 A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000002 xnZvc

; Grab starting Huffman tree

13:1A48  42 41  CLR.W   D1                       A0=00131F86 A1=00004000 A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xnZvc
13:1A4A  12 2B  MOVE.b  $FF2D(A3),D1             A0=00131F86 A1=00004000 A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=00000000 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xnZvc
13:1A4E  D2 41  ADD.W   D1,D1                    A0=00131F86 A1=00004000 A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000000C0 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xNzvc

; Start of pointer table for trees (2-bytes)

13:1A50  43 FA  LEA     $E5BA(PC),A1             A0=00131F86 A1=00004000 A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=00000180 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xnzvc

; Load tree offset

13:1A54  32 31  MOVE.w  $00(A1,D1),D1            A0=00131F86 A1=0013000C A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=00000180 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xnzvc

; Start of all Huffman tree data (not encoded script)

13:1A58  43 FA  LEA     $E75A(PC),A1             A0=00131F86 A1=0013000C A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xnzvc

; Find resting spot

13:1A5C  D2 C1  ADDA.W  D1,A1                    A0=00131F86 A1=001301B4 A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xnzvc

; Save location of tree beginning = symbol data ptr + 1

13:1A5E  24 49  MOVE.l  A1,A2                    A0=00131F86 A1=0013189B A2=00FF303A A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xnzvc

; Clear tree length, symbol offset pointer

13:1A60  42 43  CLR.W   D3                       A0=00131F86 A1=0013189B A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xnzvc
13:1A62  42 45  CLR.W   D5                       A0=00131F86 A1=0013189B A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000040 D3=00000000 D4=FFFF0003 D5=0000FFFF D6=FFFF0000 D7=00000000 xnZvc

; --------------------------------------------------------

; If tree length is not -1, do not reload

13:1A64  51 CB  DBFa    D3,#$0006 [13:1A6C]      A0=00131F86 A1=0013189B A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000040 D3=00000000 D4=FFFF0003 D5=00000000 D6=FFFF0000 D7=00000000 xnZvc

; Re-init length and reload 8-bit tree barrel

13:1A68  76 07  MOVEQ   #$07,D3                  A0=00131F86 A1=0013189B A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=00000000 D6=FFFF0000 D7=00000000 xnZvc
13:1A6A  14 19  MOVE.b  (A1)+,D2                 A0=00131F86 A1=0013189B A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000040 D3=00000007 D4=FFFF0003 D5=00000000 D6=FFFF0000 D7=00000000 xnzvc

; C = 0 --> Non-leaf node, continue
; C = 1 --> Leaf node, stop

13:1A6C  D4 02  ADD.B   D2,D2                    A0=00131F86 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000040 D3=00000007 D4=FFFF0003 D5=00000000 D6=FFFF0000 D7=00000000 xnzvc
13:1A6E  65 26  BCS     #$26 [13:1A96]           A0=00131F86 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000080 D3=00000007 D4=FFFF0003 D5=00000000 D6=FFFF0000 D7=00000000 xNzVc

; If Huffman length is not -1, do not reload

13:1A70  51 CE  DBFa    D6,#$0006 [13:1A78]      A0=00131F86 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000080 D3=00000007 D4=FFFF0003 D5=00000000 D6=FFFF0000 D7=00000000 xNzVc

; Re-init length and reload 8-bit Huffman barrel

13:1A74  7C 07  MOVEQ   #$07,D6                  A0=00131F86 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000080 D3=00000007 D4=FFFF0003 D5=00000000 D6=FFFFFFFF D7=00000000 xNzVc
13:1A76  1E 18  MOVE.b  (A0)+,D7                 A0=00131F86 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000080 D3=00000007 D4=FFFF0003 D5=00000000 D6=00000007 D7=00000000 xnzvc

; C = 0 --> Travel left, skip 0 symbol
; C = 1 --> Travel right, skip symbols in left sub-tree

13:1A78  DE 07  ADD.B   D7,D7                    A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000080 D3=00000007 D4=FFFF0003 D5=00000000 D6=00000007 D7=0000008A xNzvc
13:1A7A  64 E8  BCC     #$E8 [13:1A64]           A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000080 D3=00000007 D4=FFFF0003 D5=00000000 D6=00000007 D7=00000014 XnzVC

; ----------------------------------------------------------

; Clear symbol counter

13:1A7C  42 44  CLR.W   D4                       A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000080 D3=00000007 D4=FFFF0003 D5=00000000 D6=00000007 D7=00000014 XnzVC

; If tree length is not -1, do not reload

13:1A7E  51 CB  DBFa    D3,#$0006 [13:1A86]      A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000080 D3=00000007 D4=FFFF0000 D5=00000000 D6=00000007 D7=00000014 XnZvc

; Re-init length and reload 8-bit tree barrel

13:1A82  76 07  MOVEQ   #$07,D3                  A0=00131C85 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000000 D3=0000FFFF D4=FFFF0004 D5=0000FFFF D6=00000005 D7=000000C0 xnzvc
13:1A84  14 19  MOVE.b  (A1)+,D2                 A0=00131C85 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000000 D3=00000007 D4=FFFF0004 D5=0000FFFF D6=00000005 D7=000000C0 xnzvc

; C = 0 --> need to skip 1 more symbol
; C = 1 --> bypassed 1 symbol

13:1A86  D4 02  ADD.B   D2,D2                    A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000080 D3=00000006 D4=FFFF0000 D5=00000000 D6=00000007 D7=00000014 XnZvc
13:1A88  65 04  BCS     #$04 [13:1A8E]           A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000000 D3=00000006 D4=FFFF0000 D5=00000000 D6=00000007 D7=00000014 XnZVC

; Non-leaf node, add to loop

13:1A8A  52 44  ADDQ.W  #1,D4                    A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000000 D3=00000001 D4=FFFF0000 D5=0000FFFF D6=00000003 D7=00000040 xnZvc
13:1A8C  60 F0  BRA     #$F0 [13:1A7E]           A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000000 D3=00000001 D4=FFFF0001 D5=0000FFFF D6=00000003 D7=00000040 xnzvc

; Leaf node, skip symbol in physical list

13:1A8E  53 45  SUBQ.W  #1,D5                    A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000000 D3=00000006 D4=FFFF0000 D5=00000000 D6=00000007 D7=00000014 XnZVC

; Continue until all nodes in left subtree exhausted

13:1A90  51 CC  DBFa    D4,#$FFEC [13:1A7E]      A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000000 D3=00000006 D4=FFFF0000 D5=0000FFFF D6=00000007 D7=00000014 XNzvC

; Examine next tree node

13:1A94  60 CE  BRA     #$CE [13:1A64]           A0=00131F87 A1=0013189C A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000000 D3=00000006 D4=FFFFFFFF D5=0000FFFF D6=00000007 D7=00000014 XNzvC

; ----------------------------------------------------------

; Load decoded symbol

13:1A96  10 32  MOVE.b  $FF(A2,D5),D0            A0=00131F87 A1=0013189F A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=00000000 D1=000016E7 D2=00000000 D3=00000000 D4=FFFFFFFF D5=0000FFF2 D6=00000003 D7=00000040 XnZVC

; Save:
; - Huffman length
; - Huffman barrel
; - decoded symbol

13:1A9A  36 86  MOVE.w  D6,(A3)                  A0=00131F87 A1=0013189F A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=0000000F D1=000016E7 D2=00000000 D3=00000000 D4=FFFFFFFF D5=0000FFF2 D6=00000003 D7=00000040 Xnzvc
13:1A9C  37 47  MOVE.w  D7,$FFFE(A3)             A0=00131F87 A1=0013189F A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=0000000F D1=000016E7 D2=00000000 D3=00000000 D4=FFFFFFFF D5=0000FFF2 D6=00000003 D7=00000040 Xnzvc
13:1AA0  17 40  MOVE.b  D0,$FF2D(A3)             A0=00131F87 A1=0013189F A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=0000000F D1=000016E7 D2=00000000 D3=00000000 D4=FFFFFFFF D5=0000FFF2 D6=00000003 D7=00000040 Xnzvc

; Restore registers (a3-a1, d7-d1)

13:1AA4  4C DF  MOVEM.L (A7)+,{a7-d0}[0e fe]     A0=00131F87 A1=0013189F A2=0013189B A3=00FFF8DC A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF46 D0=0000000F D1=000016E7 D2=00000000 D3=00000000 D4=FFFFFFFF D5=0000FFF2 D6=00000003 D7=00000040 Xnzvc
13:1AA8  4E 75  RTS                              A0=00131F87 A1=00004000 A2=00FF303A A3=00FF103E A4=00000000 A5=00000000 A6=00C00004 A7=FFFFFF6E D0=0000000F D1=00000040 D2=00000040 D3=0000FFFF D4=FFFF0003 D5=0000FFFF D6=FFFFFFFF D7=00000002 Xnzvc
